package com.umeox.sdk_ring.protocol

import com.umeox.sdk_ring.RingOTAUpgradeListener
import java.io.File
import java.util.*

/**
 * 戒指端提供的接口
 */
interface IRingProtocol {

    /**
     * 断开设备连接
     */
    fun disConnectDevice()

    /**
     * 连接到设备
     */
    fun connectDevice()

    /**
     * 直接连接到设备
     */
    fun directConnectDevice()

    /**
     * 1.时间下发
     * P01,时间段,12/24小时制,是否显示时间界面(1,0)
     */
    fun syncCurrentTimeAndTimeFormat(
        date: Date?,
        is24Hour: Boolean?,
        showTime: Boolean,
        timeZone: Double
    )

    /**
     * 2.获取电量
     * P02,时间段
     */
    fun getDeviceBatteryPower()

    /**
     * 3.设置翻转：(0:正，1:反)
     * P03,时间段
     */
    fun flipDeviceScreen()

    /**
     * 4.寻找设备：操作设置值(0:停止；1:开启)
     * P04,时间段,1
     */
    fun startFindDevice()

    /**
     * 4.寻找设备：操作设置值(0:停止；1:开启)
     * P04,时间段,0
     */
    fun stopFindDevice()

    /**
     * 5.接收到设备状态信息
     * P05,时间段
     */
    fun getDeviceState()

    /**
     * 6.接收到计数信息
     * P06,时间段,tick值
     */
    fun getPrayerCountInformation(tick: String)

    /**
     * 7.实时计数数据接收
     * P07,时间段,tick值
     */
    fun getRealTimePrayerCount(tick: String)

    /**
     * 8.远程关机
     * P08,时间段
     */
    fun shutdown()

    /**
     * 9.祈祷设置
     * P09,时间段,开关,[惯例设置1，惯例设置2，维度，经度，时区]
     */
    fun setPrayerRemindersState(
        isOpen: Boolean, calculationMethodPosition: Int, juristicMethodPosition: Int,
        latitude: Double, longitude: Double, timeZone: Double
    )

    /**
     * 10.重启
     * P10,时间段,蓝牙物理地址(12位)
     */
    fun reboot(macAddress: String)

    /**
     * 11.诵经提醒设置 //时间范围00:00#23:59 //时间间隔 0,30,60,90 0:停止提醒
     * P11,时间段,时间间隔(分钟),时间范围
     * P11,时间段,0
     */
    fun setPrayerReminders(
        isOpen: Boolean, startTime: String, endTime: String,
        intervalTime: Int
    )

    /**
     * 12.获取设备端所有已存未上传计数数据
     * P12,时间段
     */
    fun getDeviceCacheData()

    /**
     * 13.获取设备端设置信息
     * P13,时间段
     */
    fun getDeviceConfigInfo()

    /**
     * 14.获取设备端相关log信息
     * P14,时间段
     */
    fun getDeviceLog()

    /**
     * 15.亮度设置
     * P15,时间段,亮度大小
     * 亮度大小(0,1)，默认0
     */
    fun setDeviceScreenBrightness(brightness: Int)

    /**
     * 16.语言显示设置
     * P16,时间段,语言ID（0-9）
     * 语言ID：阿拉，英文，法语，乌尔都，土耳其，中文，印尼，印地，波斯，德语，泰语，俄语，马来西亚语，默认0
     */
    fun setDeviceLanguage(languageType: Int)

    /**
     * 17.自定义惯例设置
     * P17,时间段,自定义ID,fajr_angle,maghrib_is_minutes,maghrib_value,isha_is_minutes,isha_value
     * 自定义ID:0,1,2
     * isha_is_minutes:当Isha Angle=Time,对应值=1;否则为0
     */
    fun setCustomizeConvention(
        fajrAngle: Float,
        maghribIsMinutes: Boolean,
        maghribValue: Float,
        ishaIsMinutes: Boolean,
        ishaValue: Float
    )

    /**
     * 18.特殊祈祷设置
     * P18,时间段,开关
     * ex:P18,时间段,1
     *    P18,时间段,0
     */
    fun setStableConvention(index: Int)

    /**
     * 19.任务设置
     * P19,时间段,任务开关,目标计数值,当前任务经文值
     */
    fun setTasbihTask(enable: Boolean, targetNumber: Int, taskId: Int)

    /**
     * 20.获取设备任务信息
     * P20,时间段,tick值
     */
    fun getTasbihTaskInfo(tick: String)

    /**
     * 21.设置船航模式
     * P21,时间段
     */
    fun setShipNavigationMode()

    /**
     * 22.自定义息屏时间设置：
     * P22,时间戳,息屏时间
     * 息屏时间(s):10/20/30/40/50/60
     * P22,20230815044136686,20
     */
    fun setScreenRestTime(time: Int)

    /**
     * 23.祈祷提醒添加独立开关、偏移时间和提醒时间：
     * 偏移和提醒时间(min): %2d模式，eg:1为01
     * P23,时间戳,晨礼开关#偏移时间#提醒时间:晌礼开关#偏移时间#提醒时间:晡礼开关#偏移时间#提醒时间:昏礼开关#偏移时间#提醒时间:宵礼开关#偏移时间#提醒时间
     * P23,20230819190558686,1#+01#+01:1#+01#+01:1#+01#+01:1#+60#+30:0#-60#-30
     * 参数为5*3  每一组数据为一个开关的配置参数
     */
    fun setPrayerRemindConfig(configs: Array<Array<Int>>)

    /**
     * 24.自定义计数提醒：
     * P24,时间戳,普通计数33*N模式开关#普通计数100*N模式开关#自定义计数值
     * P24,20230815185736686,1#1#66
     */
    fun setCustomCountReminder(normal33: Boolean, normal100: Boolean, customValue: Int)

    /**
     * 25.获取祈祷提醒配置信息
     * P25,时间戳
     * P25,20230815185736686
     */
    fun getPrayerRemindConfig()

    /**
     * 26.用户信息设置
     * P26,时间段,age,gender,height,weight,hrMax,hrRest,vo2max
     * age：10 ~ 99
     * gender:0: Female; 1: Male
     * height:100 ~ 220(cm)
     * weight:10 ~ 150 (kg)
     * hrMax:138 ~ 220 bpm //非健康系列,默认200
     * hrRest:40 ~ 100 bpm  //非健康系列,默认50
     * vo2max:大于0   //非健康系列,默认30
     */
    fun setUserInfo(
        age: Int,
        gender: Int,
        height: Int,
        weight: Int,
        hrMax: Int,
        hrRest: Int,
        vo2max: Int
    )

    /**
     * 27.获取当前步数
     * P27,时间段
     */
    fun getCurrentStepNumber()

    /**
     * 28.获取睡眠信息
     * P28,时间段
     */
    fun getAllSleepData()

    /**
     * 29.获取所有时间段计步信息
     * P29,时间段
     */
    fun getAllStepData()

    /**
     * 30.pkey读写操作
     * P30,时间段,读写标志,pkey字符串
     * //读写标志：0读取；1写入；
     * //pkey字符串:64字节
     * //P30,时间段,0
     * //P30,时间段,1,pYVRH2eMRmy9AQ8zMM/Wk8BTCDk879yxlAuqcaddV5PsDC0t0Xdz0dhE/3v4J6ww
     */
    fun pkeyOperation(write: Boolean, pkey: String)

    /**
     * 31.全亮测试指令(N01):操作设置值(0:停止；1:开启)
     * P31,时间段,操作设置值
     */
    fun n01ScreenTest(light: Boolean)

    /**
     * 32.Gsensor 测试
     * P32,时间段
     */
    fun gsensorTest()

    /**
     * 33.时间显示类型设定
     * //时间显示类型：0：时间正常显示；1：倒计时时间显示；2：长电池模式
     * P33,时间段,时间显示类型
     */
    fun setTimeShowType(type: Int)

    /**
     * 34.朝拜计数信息获取
     * P34,时间段,tick值
     */
    fun getWorshipCacheData(tick: String)

    /**
     * 35.实时朝拜计数接收
     * P35,时间段
     */
    fun getRealtimeWorship()

    /**
     * 36.led灯时间及亮度设定
     * //显示时间：秒（5-300）
     * //亮度值：（5-255）
     * P36,时间段,显示时间,亮度值
     */
    fun setLedTimeAndLight(lightTime: Int, light: Int)

    /**
     * 37.设备信息获取
     * P37,时间段
     */
    fun getSc01DeviceInfo()

    /**
     * 38.设备红外测试
     * P38,时间段,测试开关（0：打开，1：关闭）
     */
    fun deviceInfraRedTest(enable: Boolean)

    /**
     * 39.设备雷达测试
     * P39,时间段,测试开关（0：打开，1：关闭）
     */
    fun deviceRadarTest(enable: Boolean)

    /**
     * 40.获取设备端所有已存未上传朝拜计数数据
     * P40,时间段
     */
    fun getAllWorshipCacheData()

    /**
     * 41.朝拜计数修改
     * P41,时间段,祈祷阶段下标（0.fajr   1.dhur   2.magrb   3.asr   4.isha）.数值（0~127）
     */
    fun modifyWorshipNumberByIndex(index: Int, number: Int)

    /**
     * 设备马达老化测试（进入测试模式）
     * P42,时间段,测试开关（0：打开;1：关闭）
     */
    fun deviceMotorAgingTest(enable: Boolean)

    /**
     * 43.获得设备雷达返回触发结果反馈(设备雷达才会退出测试模式)
     * P43
     */
    fun getDeviceMotorAgingTestResul()

    /**
     * 44.获取tof数据反馈
     * P44
     */
    fun getTofResult()

    /**
     * 45.tof校准指令1：//不放纸箱子，远距离进行
     * P45
     */
    fun tofCalibration1()

    /**
     * 46.tof校准指令2：//放10cm距离纸箱子
     * P46
     */
    fun tofCalibration2()

    /**
     * 47.喇叭音频测试：
     * P47,时间段,音频1开关,音频2开关（0：关闭 1：开启）
     */
    fun sc01SpeakerAudioTest(audio1Enable: Boolean, audio2Enable: Boolean)

    /**
     * 51.音频播放设定
     * P51,时间段,音频播放开关
     * //音频播放开关 0：关闭 1：打开 （默认打开）
     */
    fun setSc01AudioEnable(audioEnable: Boolean)

    /**
     * OTA升级接口
     */
    fun startOTAUpgrade(file: File, isUnSafeOTA: Boolean, listener: RingOTAUpgradeListener)

    /**
     * OTA升级接口
     */
    fun startHDOTAUpgrade(file: File, listener: RingOTAUpgradeListener)
}